Make Float distinguish between float4 and float8 in PostgreSQL and more | This Week in Rails
ActionPackに関する変更です
ActionController::AllowBrowser::BrowserBlocker クラスの説明がドキュメントに記載されないようにしました
このクラスはすでにprivateなクラス(= 定数)ですが、# :nodoc: コメントが記載されておらず、ドキュメントにクラス名が露出していました
このプルリクエストでは # :nodoc: コメントをつける対応をしています
ActiveSupportに関する変更です
ActiveSupport::HashWithIndifferentAccess クラスの stringify_keys メソッドにあった不具合を修正しています
stringify_keys メソッドは Hash クラスに実装されているメソッドで、keyの文字列化を行ないます
code:rb
1 pry(main)> { 1 => 2 }.stringify_keys => {"1"=>2}
同名のメソッドが ActiveSupport::HashWithIndifferentAccess クラスにも実装されているのですが、keyが数字のときに不具合でkeyが文字列化されない、という挙動になっていました
code:rb
2 pry(main)> { 1 => 2 }.with_indifferent_access.stringify_keys => {1=>2}
code:rb
def stringify_keys; dup end
となっており、dup メソッドを呼び出しているだけ、すなわちコピーしているだけなので、keyが変わらないのは当然ですね
今回のプルリクエストでは ActiveSupport::HashWithIndifferentAccess クラス内のstringify_keys メソッドを削除しています
ActiveSupport::HashWithIndifferentAccess クラスは Hash クラスを継承しているので、この変更により Hash クラス内のメソッドが呼ばれることになります
ActiveRecordに関する変更です
PostgreSQL Adapterでfloat4型とfloat8型を区別できるようになりました
float4のカラムを含む PostgreSQL スキーマをダンプすると、生成されたスキーマダンプでカラムが float として表され、このスキーマをロードするとfloat4列がfloat8に変換される、という問題がありました
今回の変更ではfloat4とfloat8を分けて定義できるようにしています
code:diff
- m.register_type "float4", Type::Float.new
- m.alias_type "float8", "float4"
+ m.register_type "float4", Type::Float.new(limit: 24)
+ m.register_type "float8", Type::Float.new
変更前はfloat4もfloat8も64ビットのFloatとして処理されていました
変更後はfloat4は24ビットが指定され、float8はこれまで通り64ビットのFloatとして扱われます